OktaとALB認証機能をOIDCで連携して認証機能がないアプリケーションに認証機能を追加してみた[n8n実装]

OktaとALB認証機能をOIDCで連携して認証機能がないアプリケーションに認証機能を追加してみた[n8n実装]

OICDでOktaとALBを連携して認証機能を実装します。認証機能がないWebアプリケーションを保護することが可能になります。
Clock Icon2020.02.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

みなさん、認証してますか?(挨拶

先日n8nというOSSのワークフロー自動化アプリケーションを建てる記事を書いたのですが、このアプリにはまだ認証機能がありませんでした。

しかしながら幸いにも、AWSならALBでビルトイン認証としてOIDCで他のIdPと連携して認証する機能があります!OSSの足りないところはAWSの機能で補える、すばらしい。

というわけでこれをやってみました。

なお、OneLoginやGoogleや弊社の認証基盤のprismatix 認証サービスで連携する記事もありますので貼っておきます。

OneLogin(OIDC)でALB認証機能を使ってみた

【新機能】AWS ELBのApplication Load Balancer(ALB)の認証機能でWebアプリにGoogle認証を追加する

[新機能] Application Load Balancer(ALB)に新たに追加された認証機能を使う(独自IdP編)

やってみた

Oktaとの連携はこちらの記事がわかりやすかったのでこれを参照しました。

前提として、Oktaの環境とALBがすでにある状態から始めます。

Oktaアプリケーションの作成

まずはOkta側でOIDCのアプリケーションを作っていきます。

「Applications -> Add Application -> Create New App」を開いて「OpenID Connect」を選択して「Create」します。

次の画面では適当にアプリの名前を入れ(ついでにロゴも入れてます)、「Login redirect URIs」にhttps://<ALBのドメイン>/oauth2/idpresponseを入力して「Save」します。

保存し終わったら右上の「Edit」から「Initiate login URI」をhttps://<ALBのドメイン>にしておきます。

保存したらその下部に書かれている「Client ID」と「Client secret」を控えておきます。ALB側の設定で利用します。

アプリケーションにユーザをアサインします。「Assignments」タブから任意のユーザをアサインします。

 

続いて「Security -> API」からIssuerURIを取得します。下記はdefaultから取得していますが、任意で作成しても問題ありません。

詳細画面からMetadata URIの末尾を「openid-configuration」に変更して取得してもいいですが、必要なパラメータは下記のようになります。

  • 発行者→ https://youroktadomain/oauth2/default
  • 認証エンドポイント→ https://youroktadomain/oauth2/default/v1/authorize
  • トークンエンドポイント→ https://youroktadomain/oauth2/default/v1/token
  • ユーザー情報エンドポイント→ https://youroktadomain/oauth2/default/v1/userinfo
  • クライアントIDとクライアントシークレット→先程取得した値

これでOkta側の準備は完了です。

ALBへの認証機能追加

ALBの設定画面から「リスナー」タブにてリスナーを選択して「編集」します。

「アクションの追加」から「認証」を選択します。

「OIDC」を選択して各種パラメータを入力します。チェックマークを押して保存し、更に右上の保存ボタンを押します。

これで設定は完了です。ログインしてアクセスするとリダイレクトされてアクセスできました。

認証してなければ401となります。

まとめ

認証機能がないアプリケーションに対してOktaとALBを利用して認証機能を実装しました。

AWSの機能で肩代わりできるのは素晴らしいですね!是非活用してください!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.